7F01FFC0	
LUI	A0,8003
LW	A0,CC68 (A0)	8002CC68: total guards in table
OR	V1,R0,R0
OR	V0,R0,R0
BLEZ	A0,7F020010
LUI	A1,8003
SLL	A2,A0,0x4
SUBU	A2,A2,A0
SLL	A2,A2,0x3
SUBU	A2,A2,A0
SLL	A2,A2,0x2	A2=total * 0x1DC
LW	A1,CC64 (A1)	8002CC64: GUARD POINTER
//7F01FFF0:
LW	T6,001C (A1)	T6=model data pointer
ADDIU	V0,V0,01DC	V0=offset within guard data table
SLT	AT,V0,A2
BNEZ	T6,7F020008
NOP
ADDIU	V1,V1,0001
//7F020008:
BNEZ	AT,7F01FFF0
ADDIU	A1,A1,01DC
//7F020010:
JR	RA
OR	V0,V1,R0

--------------
7F032F94	evaluate 2328 preset and return stored preset
ADDIU	AT,R0,2328
BNE	A1,AT,7F032FA4	branch if preset not 2328
NOP
LH	A1,0114 (A0)	A1=cur 2328 preset	[A0=GUARDDATA pointer]
//7F032FA4:
JR	RA
OR	V0,A1,R0	V0=preset

7F032FA0	evaluate guard # preset types

-------------
7F03415C	save guard data into table entry
ADDIU	SP,SP,FFC0
SW	RA,001C (SP)
SW	A0,0040 (SP)	BODY
SW	A1,0044 (SP)	HEAD
SW	A2,0048 (SP)	PRESET POINTER
JAL	7F01FFC0
SW	A3,004C (SP)	TILE POINTER
SLTI	AT,V0,0003
BNEZ	AT,7F034244
LW	V1,0048 (SP)	V1=PRESET POINTER
LW	T6,0044 (SP)	T6=HEAD
BGEZL	T6,7F0341A4
LWC1	F4,0000 (V1)
JAL	7F0235AC	returns V0=random head
LW	A0,0040 (SP)	A0=BODY
LW	V1,0048 (SP)	V1=PRESET POINTER
SW	V0,0044 (SP)	save new head
LWC1	F4,0000 (V1)	F4=x pos
//7F0341A4:
LW	A3,0058 (SP)
LW	T7,004C (SP)
SWC1	F4,0030 (SP)
LWC1	F6,0004 (V1)	F6=y pos
ANDI	T8,A3,0010
SLTU	A3,R0,T8
SWC1	F6,0034 (SP)
LWC1	F8,0008 (V1)	F8=z pos
ADDIU	A0,SP,0030
ADDIU	A1,SP,0028
LW	A2,0050 (SP)
SW	T7,0028 (SP)
JAL	7F033F48
SWC1	F8,0038 (SP)
BEQ	V0,R0,7F034244
LW	A0,0040 (SP)
LW	A1,0044 (SP)
JAL	7F0234D0
LW	A2,0058 (SP)
BEQ	V0,R0,7F034244
OR	A0,V0,R0
LW	T0,0054 (SP)
ADDIU	A1,SP,0030
LW	A2,0050 (SP)
LW	A3,0028 (SP)
JAL	7F0203B8
SW	T0,0010 (SP)
BEQ	V0,R0,7F034244
OR	A0,V0,R0
JAL	7F03A4F0
SW	V0,003C (SP)
JAL	7F03A404
LW	A0,003C (SP)
//7F034228:
LW	V0,003C (SP)
LW	T1,0044 (SP)
LW	V1,0004 (V0)
SB	T1,0006 (V1)
LW	T2,0040 (SP)
BEQ	R0,R0,7F034248
SB	T2,000F (V1)
//7F034244:	RETURN
OR	V0,R0,R0
LW	RA,001C (SP)
ADDIU	SP,SP,0040
JR	RA
NOP


-------------
7F034258	nitty gritty of the BD command - creates guard from data
ADDIU	SP,SP,FFD0
SW	RA,0024 (SP)
SW	A1,0034 (SP)	BODY
SW	A2,0038 (SP)	HEAD
JAL	7F032F94	returns V0=final preset
OR	A1,A3,R0	PRESET
SLTI	AT,V0,2710
BEQ	AT,R0,7F0342A0	branch if 2710 preset
SLL	T8,V0,0x4	T8=preset * 0x10
SLL	T6,V0,0x2	
SUBU	T6,T6,V0
SLL	T6,T6,0x2	
LUI	T7,8007
LW	T7,5D18 (T7)	0xxx preset table address
SUBU	T6,T6,V0
SLL	T6,T6,0x2	T6=preset * 0x2C
BEQ	R0,R0,7F0342C0
ADDU	A2,T6,T7	A2=pointer to preset
//7F0342A0:	2710 presets!
LUI	T9,8007
LW	T9,5D1C (T9)	2xxx preset table address
ADDU	T8,T8,V0
SLL	T8,T8,0x2	T8=preset * 0x44
LUI	AT,FFF5
ORI	AT,AT,9FC0	AT=FFF59FC0	(-2710*44)
ADDU	A2,T8,T9	A2=pointer to preset
ADDU	A2,A2,AT	A2=pointer converted for offset value
//7F0342C0:
LWC1	F12,0018 (A2)	x rotation
LWC1	F14,0020 (A2)	z rotation
JAL	7F05AA30	7F05AA30-7F05AB64	ehh...  does stuff with preset
SW	A2,002C (SP)
LW	A2,002C (SP)	A2=pointer to preset
LW	T0,0040 (SP)	T0=pointer to {action block?}
LW	T1,0044 (SP)	
LW	A3,0028 (SP)	A3=tile pointer
SWC1	F0,0010 (SP)
LW	A0,0034 (SP)	A0=BODY
LW	A1,0038 (SP)	A1=HEAD
SW	T0,0014 (SP)
JAL	7F03415C
SW	T1,0018 (SP)
LW	RA,0024 (SP)
ADDIU	SP,SP,0030
JR	RA
NOP

++++++++++++++
7F034308	nitty gritty of BE - creates guard
ADDIU	SP,SP,FFD0
SW	RA,0024 (SP)
SW	A1,0034 (SP)
SW	A2,0038 (SP)
JAL	7F033040
OR	A1,A3,R0
LW	T6,0014 (V0)
ANDI	T7,T6,0008
BNEL	T7,R0,7F034378
OR	V0,R0,R0
LW	A0,001C (V0)
JAL	7F06CC80
SW	V0,002C (SP)
LW	V1,002C (SP)
LW	T8,0040 (SP)
LW	T9,0044 (SP)
LW	V0,0018 (V1)
LW	A0,0034 (SP)
LW	A1,0038 (SP)
LW	A3,0014 (V0)
SWC1	F0,0010 (SP)
SW	T8,0014 (SP)
SW	T9,0018 (SP)
JAL	7F03415C
ADDIU	A2,V0,0008
BEQ	R0,R0,7F03437C
LW	RA,0024 (SP)
OR	V0,R0,R0
LW	RA,0024 (SP)
//7F03437C:
ADDIU	SP,SP,0030
JR	RA
NOP
